/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.cliente;

import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.TipoDocumento;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Local;

/**
 * Interfaz que provee los metodos de administracion
 * de clientes
 * @author integradores
 */
@Local
public interface IClienteService {

    /**
     * Elimina el cliente
     * @param cCliente cliente a eliminar
     */
    void remove(Cliente cCliente);

    /**
     * Metodo que actualiza el cliente
     * @param cCliente cliente a actualizar
     */
    void update(Cliente cCliente);

    /**
     * Agrega un cliente
     * @param cCliente cliente a agregar
     */
    void add(Cliente cCliente);

    /**
     * Retorna el cliente cuya identificacion coincida
     * con el criterio de busqueda ingresado
     * @param numeroDocumento identificacion del cliente
     * @return Cliente que coincide con el criterio
     * de busqueda
     */
    Cliente findClienteById(String numeroDocumento);

    /**
     * Retorna el cliente cuya identificacion coincida
     * con el criterio de busqueda ingresado (utilizado
     * para visualizar en la grilla)
     * @param numeroDocumento identificacion del cliente
     * @return Cliente que coincide con el criterio
     * de busqueda
     */
    List<Cliente> findClienteByIdToGrid(String numeroDocumento);

    /**
     * Retorna el cliente cuya identificacion coincida
     * con el criterio de busqueda ingresado
     * @param email correo electronico del cliente
     * @return Cliente que coincide con el criterio
     * de busqueda
     */
    Cliente findClienteByEmail(String email);

    /**
     * Retorna el cliente cuya identificacion coincida
     * con el criterio de busqueda ingresado
     * @param email correo electronico del cliente
     * @return Cliente que coincide con el criterio
     * de busqueda
     */
    List<Cliente> findClienteByMail(String email);


    /**
     * Retorna todos los clientes de los muebles de los
     * alpes
     * @return Listado de clientes de los muebles de los
     * alpes
     */
    List<Cliente> findAll();

    /**
     * Retorna todos los clientes cuyo nombre
     * coincida con el criterio de busqueda
     * ingresado
     * @param nombre Nombre del cliente a buscar
     * @return Listado de clientes que coinciden con el
     * criterio de busqueda
     */
    List<Cliente> findClienteByNombre(String nombre);

    /**
     * Retorna todos los clientes de los muebles de los alpes
     * cuyo tipo de documento coincida con el criterio
     * de busqueda ingresado
     * @param tipoDocumento tipo de documento
     * @return Listado de clientes que coinciden
     * con el criterio de busqueda
     */
    List<Cliente> findClienteByTipoDocumento(TipoDocumento tipoDocumento);
}
